package threadDemo;


/**
 * 关于懒汉式的单例模式的线程安全问题：使用同步机制
 * 对于一般的方法内，使用同步代码块，可以考虑使用this
 * 对于静态方法而言，使用当前类本身充当一个锁
 */

public class TestSingleton {
    public static void main(String[] args) {
        Singleton singleton = Singleton.getInstance();

        Singleton singleton1 = Singleton.getInstance();

        System.out.println(singleton == singleton1);
        System.out.println(singleton.equals(singleton1));
    }
}

class Singleton {
    private Singleton() {
    }

    private static Singleton instance = null;

    public static Singleton getInstance() {
        if (instance == null) {
            //使用同步代码块同步机制来保证线程安全问题
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
